package weixin_new.service;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.json.JSONObject;




import weixin_new.bean.Weixin_base;
import weixin_new.rep.Article;
import weixin_new.rep.NewsMessage;
import weixin_new.rep.TextMessage;


/**
 * 核心服务类
 * 
 * @author liufeng
 * @date 2013-09-29
 */
public class CoreService {
	/**
	 * 处理微信发来的请求
	 * 
	 * @param request
	 * @return xml
	 */
	public static String processRequest(HttpServletRequest request) {
		// xml格式的消息数据
		String respXml = null;
		// 默认返回的文本消息内容
		String respContent = "未知的消息类型！";
		try {
			// 调用parseXml方法解析请求消息
			Map<String, String> requestMap = MessageUtil.parseXml(request);
			// 发送方帐号
			String fromUserName = requestMap.get("FromUserName");
			// 开发者微信号
			String toUserName = requestMap.get("ToUserName");
			// 消息类型
			String msgType = requestMap.get("MsgType");

			// 文本消息
			if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
				
				String Content = requestMap.get("Content");
				Weixin_base.add_weixin_xinxi(Content, fromUserName,msgType);
				return "";
			}
			// 图片消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {

				//发送的是图片，判断一下该用户是否参加活动了
				String PicUrl = requestMap.get("PicUrl");
				String Pic_xx = Weixin_base.add_Cxhd_dk(PicUrl, fromUserName);
				
				String bz = Pic_xx.split("</C>")[0];
				String hdxx = Pic_xx.split("</C>")[1];

				if(bz.equals("1")){
					respContent = "您参加的"+hdxx+"的促销活动打卡成功，感谢您的支持！";
				}else if(bz.equals("-1")){
					//该用户没有参加促销活动，写入消息列表中
					Weixin_base.add_weixin_xinxi(PicUrl, fromUserName,msgType);
					return "";
				}
			
			}
			// 语音消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {
				String Content = "收到了一条语音消息，请登录微信公众号查看！";
				Weixin_base.add_weixin_xinxi(Content, fromUserName,msgType);
				return  "";
			}
			// 视频消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)) {
				String Content = "收到了一条视频消息，请登录微信公众号查看！";
				Weixin_base.add_weixin_xinxi(Content, fromUserName,msgType);
				return "";
			}
			// 地理位置消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {
				String Content = "收到了一条地理信息，请登录微信公众号查看！";
				Weixin_base.add_weixin_xinxi(Content, fromUserName,msgType);
				return "";
			}
			// 链接消息
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {
				String Content = "收到了一条链接消息，请登录微信公众号查看！";
				Weixin_base.add_weixin_xinxi(Content, fromUserName,msgType);
				return "";
			}
			// 事件推送
			else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
				// 事件类型
				String eventType = requestMap.get("Event");
				// 关注
				if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
					String Pic_xx = Weixin_base.Query_Cxhd( fromUserName);
					
					String bz = Pic_xx.split("</C>")[0];
					String hdxx = Pic_xx.split("</C>")[1];

					if(bz.equals("1")){
						respContent = "感谢您关注安德瑞逹公众号，您参加的"+hdxx+"打卡优惠活动报名成功，请按照活动规则通过本公众号参与活动感谢您的支持！";
					}else if(bz.equals("-1")){
						respContent = "谢谢您的关注！";
					}
				}
				// 取消关注
				else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
					// TODO 取消订阅后用户不会再收到公众账号发送的消息，因此不需要回复
				}
				// 扫描带参数二维码
				else if (eventType.equals(MessageUtil.EVENT_TYPE_SCAN)) {
					// TODO 处理扫描带参数二维码事件
				}
				// 上报地理位置
				else if (eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)) {
					// TODO 处理上报地理位置事件
				}

			}

			System.out.println("respContent========="+respContent);

			// 回复文本消息
			TextMessage textMessage = new TextMessage();
			textMessage.setToUserName(fromUserName);
			textMessage.setFromUserName(toUserName);
			textMessage.setCreateTime(new Date().getTime());
			textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);

			// 设置文本消息的内容
			textMessage.setContent(respContent);
			// 将文本消息对象转换成xml
			respXml = MessageUtil.messageToXml(textMessage);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return respXml;
	}
}
